/**
 * <copyright>
 * </copyright>
 *
 * $Id$
 */
package Clases.impl;

import Clases.Advice;
import Clases.Atributo;
import Clases.Clase;
import Clases.ClasesFactory;
import Clases.ClasesPackage;
import Clases.Diagrama;
import Clases.Metodo;
import Clases.Metodo_Call;
import Clases.Metodo_Execution;
import Clases.Metodo_Pointcut;
import Clases.Metodo_Target_Pointcut;
import Clases.Operador_NO;
import Clases.Operador_O;
import Clases.Operador_Pointcut;
import Clases.Operador_Y;
import Clases.Parametro;
import Clases.Pointcut;
import Clases.Pointcut_Elemento;
import Clases.Relacion;
import Clases.Tipo_Advice;
import Clases.Tipo_Predefinido;
import Clases.Tipo_Predefinido_Retorno;
import Clases.Tipo_Visibilidad;

import org.eclipse.emf.ecore.EAttribute;
import org.eclipse.emf.ecore.EClass;
import org.eclipse.emf.ecore.EEnum;
import org.eclipse.emf.ecore.EPackage;
import org.eclipse.emf.ecore.EReference;

import org.eclipse.emf.ecore.impl.EPackageImpl;

/**
 * <!-- begin-user-doc -->
 * An implementation of the model <b>Package</b>.
 * <!-- end-user-doc -->
 * @generated
 */
public class ClasesPackageImpl extends EPackageImpl implements ClasesPackage {
	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	private EClass diagramaEClass = null;

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	private EClass claseEClass = null;

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	private EClass atributoEClass = null;

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	private EClass relacionEClass = null;

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	private EClass metodoEClass = null;

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	private EClass pointcut_ElementoEClass = null;

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	private EClass pointcutEClass = null;

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	private EClass operador_PointcutEClass = null;

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	private EClass operador_OEClass = null;

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	private EClass operador_NOEClass = null;

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	private EClass operador_YEClass = null;

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	private EClass adviceEClass = null;

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	private EClass parametroEClass = null;

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	private EClass metodo_PointcutEClass = null;

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	private EClass metodo_CallEClass = null;

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	private EClass metodo_ExecutionEClass = null;

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	private EClass metodo_Target_PointcutEClass = null;

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	private EEnum tipo_PredefinidoEEnum = null;

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	private EEnum tipo_Predefinido_RetornoEEnum = null;

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	private EEnum tipo_AdviceEEnum = null;

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	private EEnum tipo_VisibilidadEEnum = null;

	/**
	 * Creates an instance of the model <b>Package</b>, registered with
	 * {@link org.eclipse.emf.ecore.EPackage.Registry EPackage.Registry} by the package
	 * package URI value.
	 * <p>Note: the correct way to create the package is via the static
	 * factory method {@link #init init()}, which also performs
	 * initialization of the package, or returns the registered package,
	 * if one already exists.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see org.eclipse.emf.ecore.EPackage.Registry
	 * @see Clases.ClasesPackage#eNS_URI
	 * @see #init()
	 * @generated
	 */
	private ClasesPackageImpl() {
		super(eNS_URI, ClasesFactory.eINSTANCE);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	private static boolean isInited = false;

	/**
	 * Creates, registers, and initializes the <b>Package</b> for this
	 * model, and for any others upon which it depends.  Simple
	 * dependencies are satisfied by calling this method on all
	 * dependent packages before doing anything else.  This method drives
	 * initialization for interdependent packages directly, in parallel
	 * with this package, itself.
	 * <p>Of this package and its interdependencies, all packages which
	 * have not yet been registered by their URI values are first created
	 * and registered.  The packages are then initialized in two steps:
	 * meta-model objects for all of the packages are created before any
	 * are initialized, since one package's meta-model objects may refer to
	 * those of another.
	 * <p>Invocation of this method will not affect any packages that have
	 * already been initialized.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #eNS_URI
	 * @see #createPackageContents()
	 * @see #initializePackageContents()
	 * @generated
	 */
	public static ClasesPackage init() {
		if (isInited) return (ClasesPackage)EPackage.Registry.INSTANCE.getEPackage(ClasesPackage.eNS_URI);

		// Obtain or create and register package
		ClasesPackageImpl theClasesPackage = (ClasesPackageImpl)(EPackage.Registry.INSTANCE.getEPackage(eNS_URI) instanceof ClasesPackageImpl ? EPackage.Registry.INSTANCE.getEPackage(eNS_URI) : new ClasesPackageImpl());

		isInited = true;

		// Create package meta-data objects
		theClasesPackage.createPackageContents();

		// Initialize created meta-data
		theClasesPackage.initializePackageContents();

		// Mark meta-data to indicate it can't be changed
		theClasesPackage.freeze();

		return theClasesPackage;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EClass getDiagrama() {
		return diagramaEClass;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EReference getDiagrama_Clases_contenidas() {
		return (EReference)diagramaEClass.getEStructuralFeatures().get(0);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EAttribute getDiagrama_Nombre() {
		return (EAttribute)diagramaEClass.getEStructuralFeatures().get(1);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EReference getDiagrama_Relaciones_contenidas() {
		return (EReference)diagramaEClass.getEStructuralFeatures().get(2);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EReference getDiagrama_Pointcuts_contenidos() {
		return (EReference)diagramaEClass.getEStructuralFeatures().get(3);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EReference getDiagrama_Advices_contenidos() {
		return (EReference)diagramaEClass.getEStructuralFeatures().get(4);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EClass getClase() {
		return claseEClass;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EReference getClase_Subclase() {
		return (EReference)claseEClass.getEStructuralFeatures().get(0);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EAttribute getClase_Nombre() {
		return (EAttribute)claseEClass.getEStructuralFeatures().get(1);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EReference getClase_Atributos_contenidos() {
		return (EReference)claseEClass.getEStructuralFeatures().get(2);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EReference getClase_Metodos_contenidos() {
		return (EReference)claseEClass.getEStructuralFeatures().get(3);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EClass getAtributo() {
		return atributoEClass;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EAttribute getAtributo_Nombre() {
		return (EAttribute)atributoEClass.getEStructuralFeatures().get(0);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EAttribute getAtributo_Tipo() {
		return (EAttribute)atributoEClass.getEStructuralFeatures().get(1);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EAttribute getAtributo_Visibilidad() {
		return (EAttribute)atributoEClass.getEStructuralFeatures().get(2);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EClass getRelacion() {
		return relacionEClass;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EAttribute getRelacion_Nombre() {
		return (EAttribute)relacionEClass.getEStructuralFeatures().get(0);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EReference getRelacion_Origen() {
		return (EReference)relacionEClass.getEStructuralFeatures().get(1);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EReference getRelacion_Destino() {
		return (EReference)relacionEClass.getEStructuralFeatures().get(2);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EClass getMetodo() {
		return metodoEClass;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EAttribute getMetodo_Nombre() {
		return (EAttribute)metodoEClass.getEStructuralFeatures().get(0);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EAttribute getMetodo_Tipo_retorno() {
		return (EAttribute)metodoEClass.getEStructuralFeatures().get(1);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EReference getMetodo_Parametros_contenidos() {
		return (EReference)metodoEClass.getEStructuralFeatures().get(2);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EClass getPointcut_Elemento() {
		return pointcut_ElementoEClass;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EClass getPointcut() {
		return pointcutEClass;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EReference getPointcut_Contiene() {
		return (EReference)pointcutEClass.getEStructuralFeatures().get(0);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EAttribute getPointcut_Nombre() {
		return (EAttribute)pointcutEClass.getEStructuralFeatures().get(1);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EClass getOperador_Pointcut() {
		return operador_PointcutEClass;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EClass getOperador_O() {
		return operador_OEClass;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EReference getOperador_O_Opera_sobre() {
		return (EReference)operador_OEClass.getEStructuralFeatures().get(0);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EClass getOperador_NO() {
		return operador_NOEClass;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EReference getOperador_NO_Opera_sobre() {
		return (EReference)operador_NOEClass.getEStructuralFeatures().get(0);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EClass getOperador_Y() {
		return operador_YEClass;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EReference getOperador_Y_Opera_sobre() {
		return (EReference)operador_YEClass.getEStructuralFeatures().get(0);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EClass getAdvice() {
		return adviceEClass;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EAttribute getAdvice_Tipo() {
		return (EAttribute)adviceEClass.getEStructuralFeatures().get(0);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EReference getAdvice_Asociado_a() {
		return (EReference)adviceEClass.getEStructuralFeatures().get(1);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EClass getParametro() {
		return parametroEClass;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EAttribute getParametro_Nombre() {
		return (EAttribute)parametroEClass.getEStructuralFeatures().get(0);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EAttribute getParametro_Tipo() {
		return (EAttribute)parametroEClass.getEStructuralFeatures().get(1);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EClass getMetodo_Pointcut() {
		return metodo_PointcutEClass;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EReference getMetodo_Pointcut_Asociado_a() {
		return (EReference)metodo_PointcutEClass.getEStructuralFeatures().get(0);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EClass getMetodo_Call() {
		return metodo_CallEClass;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EClass getMetodo_Execution() {
		return metodo_ExecutionEClass;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EClass getMetodo_Target_Pointcut() {
		return metodo_Target_PointcutEClass;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EEnum getTipo_Predefinido() {
		return tipo_PredefinidoEEnum;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EEnum getTipo_Predefinido_Retorno() {
		return tipo_Predefinido_RetornoEEnum;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EEnum getTipo_Advice() {
		return tipo_AdviceEEnum;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EEnum getTipo_Visibilidad() {
		return tipo_VisibilidadEEnum;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public ClasesFactory getClasesFactory() {
		return (ClasesFactory)getEFactoryInstance();
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	private boolean isCreated = false;

	/**
	 * Creates the meta-model objects for the package.  This method is
	 * guarded to have no affect on any invocation but its first.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public void createPackageContents() {
		if (isCreated) return;
		isCreated = true;

		// Create classes and their features
		diagramaEClass = createEClass(DIAGRAMA);
		createEReference(diagramaEClass, DIAGRAMA__CLASES_CONTENIDAS);
		createEAttribute(diagramaEClass, DIAGRAMA__NOMBRE);
		createEReference(diagramaEClass, DIAGRAMA__RELACIONES_CONTENIDAS);
		createEReference(diagramaEClass, DIAGRAMA__POINTCUTS_CONTENIDOS);
		createEReference(diagramaEClass, DIAGRAMA__ADVICES_CONTENIDOS);

		claseEClass = createEClass(CLASE);
		createEReference(claseEClass, CLASE__SUBCLASE);
		createEAttribute(claseEClass, CLASE__NOMBRE);
		createEReference(claseEClass, CLASE__ATRIBUTOS_CONTENIDOS);
		createEReference(claseEClass, CLASE__METODOS_CONTENIDOS);

		atributoEClass = createEClass(ATRIBUTO);
		createEAttribute(atributoEClass, ATRIBUTO__NOMBRE);
		createEAttribute(atributoEClass, ATRIBUTO__TIPO);
		createEAttribute(atributoEClass, ATRIBUTO__VISIBILIDAD);

		relacionEClass = createEClass(RELACION);
		createEAttribute(relacionEClass, RELACION__NOMBRE);
		createEReference(relacionEClass, RELACION__ORIGEN);
		createEReference(relacionEClass, RELACION__DESTINO);

		metodoEClass = createEClass(METODO);
		createEAttribute(metodoEClass, METODO__NOMBRE);
		createEAttribute(metodoEClass, METODO__TIPO_RETORNO);
		createEReference(metodoEClass, METODO__PARAMETROS_CONTENIDOS);

		pointcut_ElementoEClass = createEClass(POINTCUT_ELEMENTO);

		pointcutEClass = createEClass(POINTCUT);
		createEReference(pointcutEClass, POINTCUT__CONTIENE);
		createEAttribute(pointcutEClass, POINTCUT__NOMBRE);

		operador_PointcutEClass = createEClass(OPERADOR_POINTCUT);

		operador_OEClass = createEClass(OPERADOR_O);
		createEReference(operador_OEClass, OPERADOR_O__OPERA_SOBRE);

		operador_NOEClass = createEClass(OPERADOR_NO);
		createEReference(operador_NOEClass, OPERADOR_NO__OPERA_SOBRE);

		operador_YEClass = createEClass(OPERADOR_Y);
		createEReference(operador_YEClass, OPERADOR_Y__OPERA_SOBRE);

		adviceEClass = createEClass(ADVICE);
		createEAttribute(adviceEClass, ADVICE__TIPO);
		createEReference(adviceEClass, ADVICE__ASOCIADO_A);

		parametroEClass = createEClass(PARAMETRO);
		createEAttribute(parametroEClass, PARAMETRO__NOMBRE);
		createEAttribute(parametroEClass, PARAMETRO__TIPO);

		metodo_PointcutEClass = createEClass(METODO_POINTCUT);
		createEReference(metodo_PointcutEClass, METODO_POINTCUT__ASOCIADO_A);

		metodo_CallEClass = createEClass(METODO_CALL);

		metodo_ExecutionEClass = createEClass(METODO_EXECUTION);

		metodo_Target_PointcutEClass = createEClass(METODO_TARGET_POINTCUT);

		// Create enums
		tipo_PredefinidoEEnum = createEEnum(TIPO_PREDEFINIDO);
		tipo_Predefinido_RetornoEEnum = createEEnum(TIPO_PREDEFINIDO_RETORNO);
		tipo_AdviceEEnum = createEEnum(TIPO_ADVICE);
		tipo_VisibilidadEEnum = createEEnum(TIPO_VISIBILIDAD);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	private boolean isInitialized = false;

	/**
	 * Complete the initialization of the package and its meta-model.  This
	 * method is guarded to have no affect on any invocation but its first.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public void initializePackageContents() {
		if (isInitialized) return;
		isInitialized = true;

		// Initialize package
		setName(eNAME);
		setNsPrefix(eNS_PREFIX);
		setNsURI(eNS_URI);

		// Create type parameters

		// Set bounds for type parameters

		// Add supertypes to classes
		claseEClass.getESuperTypes().add(this.getMetodo_Target_Pointcut());
		metodoEClass.getESuperTypes().add(this.getMetodo_Target_Pointcut());
		operador_PointcutEClass.getESuperTypes().add(this.getPointcut_Elemento());
		operador_OEClass.getESuperTypes().add(this.getOperador_Pointcut());
		operador_NOEClass.getESuperTypes().add(this.getOperador_Pointcut());
		operador_YEClass.getESuperTypes().add(this.getOperador_Pointcut());
		metodo_PointcutEClass.getESuperTypes().add(this.getPointcut_Elemento());
		metodo_CallEClass.getESuperTypes().add(this.getMetodo_Pointcut());
		metodo_ExecutionEClass.getESuperTypes().add(this.getMetodo_Pointcut());

		// Initialize classes and features; add operations and parameters
		initEClass(diagramaEClass, Diagrama.class, "Diagrama", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
		initEReference(getDiagrama_Clases_contenidas(), this.getClase(), null, "clases_contenidas", null, 0, -1, Diagrama.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
		initEAttribute(getDiagrama_Nombre(), ecorePackage.getEString(), "nombre", "Nombre_Diagrama", 0, 1, Diagrama.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
		initEReference(getDiagrama_Relaciones_contenidas(), this.getRelacion(), null, "relaciones_contenidas", null, 0, -1, Diagrama.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
		initEReference(getDiagrama_Pointcuts_contenidos(), this.getPointcut(), null, "pointcuts_contenidos", null, 0, -1, Diagrama.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
		initEReference(getDiagrama_Advices_contenidos(), this.getAdvice(), null, "advices_contenidos", null, 0, -1, Diagrama.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);

		initEClass(claseEClass, Clase.class, "Clase", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
		initEReference(getClase_Subclase(), this.getClase(), null, "subclase", null, 0, 1, Clase.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
		initEAttribute(getClase_Nombre(), ecorePackage.getEString(), "nombre", "Nombre_Clase", 0, 1, Clase.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
		initEReference(getClase_Atributos_contenidos(), this.getAtributo(), null, "atributos_contenidos", null, 0, -1, Clase.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
		initEReference(getClase_Metodos_contenidos(), this.getMetodo(), null, "metodos_contenidos", null, 0, -1, Clase.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);

		initEClass(atributoEClass, Atributo.class, "Atributo", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
		initEAttribute(getAtributo_Nombre(), ecorePackage.getEString(), "nombre", "Nombre_Atributo", 0, 1, Atributo.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
		initEAttribute(getAtributo_Tipo(), this.getTipo_Predefinido(), "tipo", null, 0, 1, Atributo.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
		initEAttribute(getAtributo_Visibilidad(), this.getTipo_Visibilidad(), "visibilidad", "Privado", 0, 1, Atributo.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);

		initEClass(relacionEClass, Relacion.class, "Relacion", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
		initEAttribute(getRelacion_Nombre(), ecorePackage.getEString(), "nombre", "Nombre_Relacion", 0, 1, Relacion.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
		initEReference(getRelacion_Origen(), this.getClase(), null, "origen", null, 1, 1, Relacion.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
		initEReference(getRelacion_Destino(), this.getClase(), null, "destino", null, 1, 1, Relacion.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);

		initEClass(metodoEClass, Metodo.class, "Metodo", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
		initEAttribute(getMetodo_Nombre(), ecorePackage.getEString(), "nombre", "Nombre_Metodo", 0, 1, Metodo.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
		initEAttribute(getMetodo_Tipo_retorno(), this.getTipo_Predefinido_Retorno(), "tipo_retorno", "Void", 0, 1, Metodo.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
		initEReference(getMetodo_Parametros_contenidos(), this.getParametro(), null, "parametros_contenidos", null, 0, -1, Metodo.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);

		initEClass(pointcut_ElementoEClass, Pointcut_Elemento.class, "Pointcut_Elemento", IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);

		initEClass(pointcutEClass, Pointcut.class, "Pointcut", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
		initEReference(getPointcut_Contiene(), this.getPointcut_Elemento(), null, "contiene", null, 1, 1, Pointcut.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
		initEAttribute(getPointcut_Nombre(), ecorePackage.getEString(), "nombre", "Nombre_Pointcut", 0, 1, Pointcut.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);

		initEClass(operador_PointcutEClass, Operador_Pointcut.class, "Operador_Pointcut", IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);

		initEClass(operador_OEClass, Operador_O.class, "Operador_O", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
		initEReference(getOperador_O_Opera_sobre(), this.getPointcut_Elemento(), null, "opera_sobre", null, 2, 2, Operador_O.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);

		initEClass(operador_NOEClass, Operador_NO.class, "Operador_NO", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
		initEReference(getOperador_NO_Opera_sobre(), this.getPointcut_Elemento(), null, "opera_sobre", null, 1, 1, Operador_NO.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);

		initEClass(operador_YEClass, Operador_Y.class, "Operador_Y", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
		initEReference(getOperador_Y_Opera_sobre(), this.getPointcut_Elemento(), null, "opera_sobre", null, 2, 2, Operador_Y.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);

		initEClass(adviceEClass, Advice.class, "Advice", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
		initEAttribute(getAdvice_Tipo(), this.getTipo_Advice(), "tipo", "before", 0, 1, Advice.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
		initEReference(getAdvice_Asociado_a(), this.getPointcut(), null, "asociado_a", null, 1, 1, Advice.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);

		initEClass(parametroEClass, Parametro.class, "Parametro", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
		initEAttribute(getParametro_Nombre(), ecorePackage.getEString(), "nombre", "Nombre_Parametro", 0, 1, Parametro.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
		initEAttribute(getParametro_Tipo(), this.getTipo_Predefinido(), "tipo", "Entero", 0, 1, Parametro.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);

		initEClass(metodo_PointcutEClass, Metodo_Pointcut.class, "Metodo_Pointcut", IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
		initEReference(getMetodo_Pointcut_Asociado_a(), this.getMetodo_Target_Pointcut(), null, "asociado_a", null, 1, 1, Metodo_Pointcut.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);

		initEClass(metodo_CallEClass, Metodo_Call.class, "Metodo_Call", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);

		initEClass(metodo_ExecutionEClass, Metodo_Execution.class, "Metodo_Execution", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);

		initEClass(metodo_Target_PointcutEClass, Metodo_Target_Pointcut.class, "Metodo_Target_Pointcut", IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);

		// Initialize enums and add enum literals
		initEEnum(tipo_PredefinidoEEnum, Tipo_Predefinido.class, "Tipo_Predefinido");
		addEEnumLiteral(tipo_PredefinidoEEnum, Tipo_Predefinido.ENTERO);
		addEEnumLiteral(tipo_PredefinidoEEnum, Tipo_Predefinido.REAL);
		addEEnumLiteral(tipo_PredefinidoEEnum, Tipo_Predefinido.LOGICO);
		addEEnumLiteral(tipo_PredefinidoEEnum, Tipo_Predefinido.CARACTER);
		addEEnumLiteral(tipo_PredefinidoEEnum, Tipo_Predefinido.CADENA);

		initEEnum(tipo_Predefinido_RetornoEEnum, Tipo_Predefinido_Retorno.class, "Tipo_Predefinido_Retorno");
		addEEnumLiteral(tipo_Predefinido_RetornoEEnum, Tipo_Predefinido_Retorno.ENTERO);
		addEEnumLiteral(tipo_Predefinido_RetornoEEnum, Tipo_Predefinido_Retorno.REAL);
		addEEnumLiteral(tipo_Predefinido_RetornoEEnum, Tipo_Predefinido_Retorno.CARACTER);
		addEEnumLiteral(tipo_Predefinido_RetornoEEnum, Tipo_Predefinido_Retorno.LOGICO);
		addEEnumLiteral(tipo_Predefinido_RetornoEEnum, Tipo_Predefinido_Retorno.CADENA);
		addEEnumLiteral(tipo_Predefinido_RetornoEEnum, Tipo_Predefinido_Retorno.VOID);

		initEEnum(tipo_AdviceEEnum, Tipo_Advice.class, "Tipo_Advice");
		addEEnumLiteral(tipo_AdviceEEnum, Tipo_Advice.BEFORE);
		addEEnumLiteral(tipo_AdviceEEnum, Tipo_Advice.AFTER);
		addEEnumLiteral(tipo_AdviceEEnum, Tipo_Advice.AROUND);
		addEEnumLiteral(tipo_AdviceEEnum, Tipo_Advice.BEBORE_RETURNING);
		addEEnumLiteral(tipo_AdviceEEnum, Tipo_Advice.AFTER_RETURNING);

		initEEnum(tipo_VisibilidadEEnum, Tipo_Visibilidad.class, "Tipo_Visibilidad");
		addEEnumLiteral(tipo_VisibilidadEEnum, Tipo_Visibilidad.PRIVADO);
		addEEnumLiteral(tipo_VisibilidadEEnum, Tipo_Visibilidad.PUBLICO);
		addEEnumLiteral(tipo_VisibilidadEEnum, Tipo_Visibilidad.PAQUETE);

		// Create resource
		createResource(eNS_URI);
	}

} //ClasesPackageImpl
